package com.imut.lagain.service;
import org.slf4j.LoggerFactory;

import com.imut.lagain.entity.AnxietySession;
import com.imut.lagain.entity.BreathingExercise;
import com.imut.lagain.entity.SensoryExercise;
import com.imut.lagain.entity.ThoughtAnalysis;
import com.imut.lagain.entity.AnxietyReminder;
import java.util.List;
import java.util.Map;

/**
 * 焦虑安抚空间服务接口
 * 提供呼吸引导、感官安抚、思维拆解等功能
 */
public interface IAnxietyReliefService {

    /**
     * 开始焦虑安抚会话
     * @param userId 用户ID
     * @param anxietyLevel 焦虑等级(1-10)
     * @param triggers 焦虑触发因素
     * @return 安抚会话信息
     */
    AnxietySession startAnxietySession(Long userId, Integer anxietyLevel, List<String> triggers);

    /**
     * 获取呼吸练习方案
     * @param userId 用户ID
     * @param anxietyLevel 焦虑等级
     * @param duration 期望时长(分钟)
     * @return 呼吸练习方案
     */
    BreathingExercise getBreathingExercise(Long userId, Integer anxietyLevel, Integer duration);

    /**
     * 开始呼吸引导
     * @param sessionId 会话ID
     * @param exerciseType 练习类型(4-7-8, box_breathing, deep_breathing)
     * @return 引导配置
     */
    Map<String, Object> startBreathingGuidance(Long sessionId, String exerciseType);

    /**
     * 记录呼吸练习进度
     * @param sessionId 会话ID
     * @param cyclesCompleted 完成的呼吸周期数
     * @param effectivenessRating 效果评分(1-5)
     * @return 是否记录成功
     */
    Boolean recordBreathingProgress(Long sessionId, Integer cyclesCompleted, Integer effectivenessRating);

    /**
     * 开始呼吸练习
     * @param userId 用户ID
     * @param sessionId 会话ID
     * @param exerciseType 练习类型
     * @param duration 持续时间
     * @param anxietyLevel 焦虑等级
     * @return 呼吸练习信息
     */
    BreathingExercise startBreathingExercise(Long userId, Long sessionId, String exerciseType, Integer duration, Integer anxietyLevel);

    /**
     * 更新呼吸练习进度
     * @param exerciseId 练习ID
     * @param cyclesCompleted 完成的周期数
     * @param currentAnxietyLevel 当前焦虑等级
     * @return 是否更新成功
     */
    Boolean updateBreathingProgress(Long exerciseId, Integer cyclesCompleted, Integer currentAnxietyLevel);

    /**
     * 完成呼吸练习
     * @param exerciseId 练习ID
     * @return 完成结果
     */
    Map<String, Object> completeBreathingExercise(Long exerciseId);

    /**
     * 获取感官安抚练习
     * @param userId 用户ID
     * @param senseType 感官类型(sight, sound, touch, smell, taste)
     * @param environment 环境类型(indoor, outdoor, workplace)
     * @return 感官练习方案
     */
    SensoryExercise getSensoryExercise(Long userId, String senseType, String environment);

    /**
     * 开始5-4-3-2-1感官接地练习
     * @param sessionId 会话ID
     * @return 练习指导内容
     */
    Map<String, Object> start54321Exercise(Long sessionId);

    /**
     * 记录感官练习结果
     * @param sessionId 会话ID
     * @param senseType 感官类型
     * @param items 识别的物品列表
     * @param effectiveness 效果评分
     * @return 是否记录成功
     */
    Boolean recordSensoryResult(Long sessionId, String senseType, List<String> items, Integer effectiveness);

    /**
     * 开始思维拆解分析
     * @param sessionId 会话ID
     * @param anxiousThought 焦虑想法
     * @return 拆解引导问题
     */
    ThoughtAnalysis startThoughtAnalysis(Long sessionId, String anxiousThought);

    /**
     * 进行认知重构
     * @param analysisId 分析ID
     * @param answers 用户回答
     * @return 重构建议
     */
    Map<String, Object> performCognitiveRestructuring(Long analysisId, Map<String, String> answers);

    /**
     * 生成替代性思维
     * @param analysisId 分析ID
     * @param originalThought 原始想法
     * @return 替代性思维建议
     */
    List<String> generateAlternativeThoughts(Long analysisId, String originalThought);

    /**
     * 完成安抚会话
     * @param sessionId 会话ID
     * @param finalAnxietyLevel 结束时焦虑等级
     * @param feedback 用户反馈
     * @return 会话总结
     */
    Map<String, Object> completeSession(Long sessionId, Integer finalAnxietyLevel, String feedback);

    /**
     * 完成焦虑安抚会话
     * @param sessionId 会话ID
     * @param finalAnxietyLevel 结束时焦虑等级
     * @param feedback 用户反馈
     * @return 会话总结
     */
    Map<String, Object> completeAnxietySession(Long sessionId, Integer finalAnxietyLevel, String feedback);

    /**
     * 获取个性化安抚建议
     * @param userId 用户ID
     * @param currentMood 当前心情
     * @param timeOfDay 时间段
     * @return 个性化建议
     */
    List<String> getPersonalizedSuggestions(Long userId, String currentMood, String timeOfDay);

    /**
     * 获取安抚历史记录
     * @param userId 用户ID
     * @param days 查询天数
     * @return 历史记录
     */
    List<AnxietySession> getReliefHistory(Long userId, Integer days);

    /**
     * 获取安抚历史记录
     * @param userId 用户ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 历史记录
     */
    List<AnxietySession> getComfortHistory(Long userId, String startDate, String endDate);

    /**
     * 分析焦虑模式
     * @param userId 用户ID
     * @return 焦虑模式分析结果
     */
    Map<String, Object> analyzeAnxietyPatterns(Long userId);

    /**
     * 获取进步报告
     * @param userId 用户ID
     * @param period 统计周期(week, month, quarter)
     * @return 进步报告
     */
    Map<String, Object> getProgressReport(Long userId, String period);

    /**
     * 设置安抚提醒
     * @param userId 用户ID
     * @param reminderType 提醒类型(daily, stress_detected, custom)
     * @param settings 提醒设置
     * @return 是否设置成功
     */
    Boolean setReliefReminder(Long userId, String reminderType, Map<String, Object> settings);

    /**
     * 获取紧急安抚方案
     * @param userId 用户ID
     * @param severity 严重程度(mild, moderate, severe)
     * @return 紧急安抚方案
     */
    Map<String, Object> getEmergencyReliefPlan(Long userId, String severity);
}
